ישנם כמה דברים שהחלט עשו שינוי משמעותי בעולם ה php, ה OOP למשל, composer, ועוד כמה מהפכות,
אשמח לספר לכם על הבא בתור, hhvm.
ישנם כמה דברים שהחלט עשו שינוי משמעותי בעולם ה php, ה OOP למשל, composer, ועוד כמה מהפכות,
אשמח לספר לכם על הבא בתור, HHVM.
HipHop PHP נוצרה ע״י הצוות של פייסבוק במטרה לחסוך משאבים בשרתי החברה.
פייסבוק שכמו שרובכם ידעתם, כתובה ב php, וכוללת הרבה קוד, סליחה, המון קוד!
שפת ה php עם כל הנוחות שבה, היא לא שפה שקרובה למכונה כמו c++,
ועל כן לא מסוגלת לרוץ ולהיות חסכונית במשאבים כמוהה. אז מה עושים? לשכתב הכל ל c++ זה לא ריאלי מאחר ומדובר במיליוני שורות.
אז כן, הפרוייקט HIPHOP PHP, קיים כבר שנים, האמת מאז 2008, והיה מתרגם כל פעם את כל הקוד ל c++ (HPHPc),
הבעיה, שהתהליך הזה לקח שעות, אומנם הקוד בסוף רץ יותר,
אבל עבור המפתחים זה היה נורא.
לכן פייסבוק יצרו גירסא שלא מקמפלת את כל הקוד כל הזמן (HPHPi),
וגם גירסא שמתאימה לפיתוח לוקאלי (HPHPd), אנחנו ב 2012,
ו HPHPi היה הצלחה מאוד גדולה עבור פייסבוק, הם קיבלו שיפור מאסיבי בביצועים,
אך בעותה העת תמכו בגירסא 5.2 של php עם כמה הסתיגויות ודברים מסויימים שלא כל כך עבדו. ב2011,
פייסבוק פתחו את hhvm (hiphop virtual machine) כקוד פתוח לציבור,
וביטלו את hphpc (מה שמקמפל לשפת c++),
hhvm כבר יודע לקמפל קוד של php תוך כדי ריצה, וואו! כש hhvm הוצג לראשונה,
הוא כבר תמך ב php 5.4 כמעט ב100%.
(תמיכה מלאה ב 5.5 אוטוטו) בגירסא 2.3 של hhvm הוצגה היכולת בשימוש fast CGI,
כך שמי שמשתמש ב nginx עם php-fpm יכול בקלות להלביש את hhvm ואפילו לבחור איזו בקשה לנתב לאן,
(כמו שאני עשיתי, ותכף נסתכל על זה) הקהילה של hhvm גדלה,
ויש הרבה הרחבות, שמחליפות הרחבות רגילות של php, ונכנסות ישר לתוך HHVM,
ונותנות לנו עוד שיפורי ביצועים (לחובבי ה mongo, תוסף ה MongoDB קיים ל HHVM) לפי נתונים של פייסבוק,
ניתן לקבל פי 5 יותר ביצועים, פי 5???
על אותו שרת אני יכול לשרת פי 5 יותר משתמשים?
נשמע טוב מכדי להיות אמיתי, החלטתי לבדוק בעצמי, כי עד שאני לא בודק, לא מאמין לאף אחד.
לצורך הבדיקה, העליתי שרת עליו התקנתי רק nginx + php-fpm + mysql עם ההרחבות המקובלות ל php.
כדי שנוכל לקבל תמונה איכותית יותר, העליתי 2 שרתים,
שרת אחד קטן:
ubuntu server 13
ליבה אחת
512 mb ram
כונן ssd
שרת אחד חזק:
ubuntu server 13
4 ליבות
8גיגה ראם
כונן ssd
מניסיון, תוכנות מסוימות לפעמים יכולות להתנהג שונה בסביבות חזקות-חלשות יותר,
לרוב שרתים גדולים מטשטשים הבדלים, ובכל זאת נבדוק את זה,
כמובן שהתאמתי את ההגדרות של ה nginx בשרת החזק שיעבוד עם 4 ליבות.
נתחיל עם ההתקנה של hhvm
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add -
echo deb http://dl.hhvm.com/ubuntu saucy main | tee /etc/apt/sources.list.d/hhvm.list
apt-get update
apt-get install hhvm
echo deb http://dl.hhvm.com/ubuntu saucy main | tee /etc/apt/sources.list.d/hhvm.list
apt-get update
apt-get install hhvm
וכעט נפעיל את hhvm כ deamon
service hhvm start
יש לי 2 קבצים ב site-available של nginx, אחד רגיל, והשני משתמש ב hhvm, כדי להשתמש ב hhvm החליפו את הבלוג הרגיל שמזהה php ב
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
(שימו לב, הקבצים שלי יושבים ב /usr/share/nginx/html)
כעט יש לי 2 כתובות, אחת מריצה לי את האתר רגיל,
והאחרת תפעיל לי את האתר עם hhvm, כיצד תדעו ש hhvm פועל?
ב response של כל בקשה לשרת תקבלו: X-Powered-By:HHVM/3.0.1
(כמובן, עם מספר הגירסא שלכם)
חשוב להזכיר, בגירסאות קודמות של HHVM יכולתם להריץ שרת מובנה משלכם,
ללא שימוש ב Nginx או Apache, כל זה השתנה בגירסא 3,
וכעת זה מתלבש כ fast CGI על Nginx או Apache, שזה מעולה, ככה יש לנו את היכולות הנהדרות של שניהם.
כיצד מתבצעת הבדיקה
החלטתי לבדוק על 2 השרתים, את שני הדברים הבאים:
קוד אחד שנותן לי x (מאות אלפים) מספרים בסדרת פיבונ׳צאי,
שזו עבודה קצת מאסיבית עם מספרים ומערכים.
והבדיקה היותר רצינית: בלוג של וורדפרס, שבו יש הכל מהכל!
אז בסך הכל יש לנו 4 טסטים שונים, שכל אחד מהם אני אריץ 3 פעמים ליתר ביטחון לוודא שאין (ולא צריכות להיות) הפרעות ברקע.
חשוב: אני לא בודק כמה זמן קוד רץ, מבדיקות שערכתי ב hhvm זה רץ מהר יותר, אבל זה לא הכל.
אני עושה בדיקת ab של Apache, זו הבדיקה המקובלת לבדוק עמידות של שרת, ובעיקר בכמה בקשות לשניה אני יכול לתמוך (מי שלא מכיר את הבדיקה, תכף יבין הכל)
ניסיתי בכל מיני תצורות והתוצאות פחות או יותר זהות,
ab -n 1000 -c 100 http://…
(1000 בקשות, 100 במקביל)
Nginx + php
כעת נבדוק את המצב הרגיל, nginx + php-fpm,
הקובץ בסך הכל כולל פונקציה שמחזיקה x ספרות בסידרת פיבונאצ׳י, (200 אלף במקרה שלנו),
הרבה מספרים, חישובים, ומערך אחד גדול בעיקר.
תוצאה בשרת הקטן:
Requests per second: 15.02
תוצאה בשרת הגדול:
Requests per second: 55.93
אתר הוורדפרס :
תוצאה בשרת הקטן:
Requests per second: 24.79
תוצאה בשרת הגדול:
Requests per second: 92.98
Nginx + hhvm
תוצאה בשרת הקטן:
Requests per second: 80.61
בשרת הגדול:
Requests per second: 229.84
אתר הוורדפרס
תוצאה בשרת הקטן:
Requests per second: 55.51
בשרת הגדול:
Requests per second: 171.33
אז ככה,
התוצאות בשרת הקטן:
קוד הפיבונ׳צאי יכול לשרת פי 5.33 יותר בקשות עם hhvm
בעוד קוד הוורדפרס יותר מורכב, ועדיין ניתן לשרת פי 2.2 יותר בקשות!
התוצאות בשרת החזק: קוד הפיבונ׳צאי:
יכול לשרת בדיוק פי 4.16 יותר בקשות עם hhvm
וורדפרס: פי 1.85 יותר בקשות
בהחלט שווה לשים לב להתפתחויות,
האתר הרישמי: hhvm.c om
הרפוזיטורי בגיטהאב שמכיל גם מדריך התקנה לapache:
https://github.com/facebook/hhvm
ובונוס:
ניתן להריץ קבצים עם תצורה קצת שונה של php (אפילו קראו לזה hacklang כאילו זו שפה חדשה) שתעזור קצת יותר לקומפיילר של hhvm,
וטוענים שזה נותן עד פי 9 יותר ביצועים:
http://hacklang.org/
כמובן ניתן לעשות tuning נוסף ולשפר ביצועים,u כן, זה עובד עם הפריימוורקים שלכם.
ישנם בהחלט כמה דברים ששינו את עולם ה php, אני בטוח שזה אחד מהם.
התוצאות מדהימות לחלוטין, ההבדל הוא לא באחוזים בודדים, ההבדל הוא בין כמעט פי 2 באתרים מורכבים לפי 5 ויותר! תארו לכם, אתם יכולים לשרת פי 2-5 יותר אנשים על אותה החומרה!
או לשרת את אותה כמות האנשים על חצי / חמישית חומרה ( = חיסכון בהרבה כסף)
מקווה שיצאתם עם מסקנות, שיהיה לכם בהצלחה :)
תגובות לכתבה:
אחלה פוסט, תודה.
אם אפשר מידי פעם לצרף רשימה של המקורות להמשך חפירה בנושא...